package dk.muldbjergskolen.db;

import java.sql.*;
import java.util.ArrayList;

import dk.muldbjergskolen.model.*;
import dk.muldbjergskolen.ctr.*;
import dk.muldbjergskolen.db.PersonDB.UGyldigtPostNr;

public class ElevDB {
	private ConnectionDB con;

	public ElevDB() {
		con = ConnectionDB.getInstance();
	}

	/**
	 * finder elever på personid og klasseid i databasen
	 */
	public ArrayList<Elev> findElever() {
		ArrayList<Elev> elevListe = new ArrayList<Elev>();
		String query = "select personId, klasseId from elev";
		Elev elev = null;

		try {
			ResultSet rs = con.getResultSet(query);

			while (rs.next()) {
				elev = buildElev(rs);
				elevListe.add(elev);
			}
			rs.close();
		} catch (SQLException e) {
			System.out.println(e.getMessage());
		}

		return elevListe;
	}

	/**
	 * finder elev på deres id
	 * 
	 * @param id
	 * @return elev
	 */
	public Elev getElev(int id) {
		Elev elev = null;
		String query = "SELECT personId, klasseId FROM Elev WHERE personId = "
				+ id;

		try {
			ResultSet rs = con.getResultSet(query);
			if (rs.next()) {
				elev = buildElev(rs);
			}
		} catch (SQLException e) {
			System.out.println("ElevDB.getElev: " + e.getMessage());
		}

		return elev;
	}

	private Elev buildElev(ResultSet rs) throws SQLException {
		// Lav først personen.
		PersonDB pCtr = new PersonDB();
		Person p = pCtr.getPerson(rs.getInt("personId"));

		// Lav nu eleven.
		Elev elev = new Elev(p, new KlasseCtr().findKlasseid(rs
				.getInt("klasseId")));

		return elev;
	}

	/**
	 * Retter en eksisterende elev.
	 * 
	 * @param id
	 *            på den eksisterende elev.
	 * @param nyElev
	 *            Objektet som indeholder den nye elev.
	 * @throws UGyldigtPostNr
	 */
	public void retElev(int id, Elev nyElev) throws UGyldigtPostNr {
		// Ret person dataene først.
		PersonDB pDB = new PersonDB();
		pDB.retPerson(id, nyElev);

		// Ret elev dataene.
		String query = "UPDATE Elev SET klasseId = "
				+ nyElev.getKlasse().getId() + " WHERE personId = " + id;

		try {
			con.execQuery(query);
		} catch (SQLException e) {
			System.out.println("ElevDB.retElev: " + e.getMessage());
		}
	}

	public void opretElev(Elev elev) throws UGyldigtPostNr {
		PersonDB pDB = new PersonDB();
		pDB.opretPerson(elev);
		int personId = con.getMaxId("Person");

		String query = "insert into Elev values ('" + personId + "','"
				+ elev.getKlasse().getId() + "')";

		try {
			con.execQuery(query);
		} catch (SQLException e) {
			System.out.println(e.getMessage());
		}
	}
}
